1. Field of the Invention
The present invention relates to bridge circuits for managing data flow between components of a computer system. More specifically, the present invention relates to a bridge circuit that incorporates a bi-directional buffering system to control address and data transfers between a processor and components attached to a computer bus.
2. Description of the Related Art
Most currently available computer systems include several substructures including a central processing unit (xe2x80x9cCPUxe2x80x9d or xe2x80x9cprocessorxe2x80x9d), a memory architecture, and an input/output (I/O) system. As is well known, the processor processes information that is provided to it by other substructures in the computer system. The memory substructure acts as a storage area for holding commands and data that are eventually acted upon by the processor or other computer components. The input/output system of the computer provides an interface for the computer system to communicate with peripheral devices such as hard disks, monitors and telephone modems. Within the computer are several xe2x80x9cbusesxe2x80x9d that manage communications and data transfers between the various computer substructures. For example, a host bus manages information flow to and from the processor. Accordingly, data and address information moving to and from the processor travels across the processor bus. In addition an I/O bus manages communications between peripheral devices and other parts of the computer system.
As faster processors and peripherals have become available to computer manufacturers, the importance of efficiently transferring address and data information between computer substructures has increased. For example, the I/O bus in early personal computers transferred data at a speed of 8 MHz whereas the I/O bus in modern personal computers runs at 33 MHz.
One factor that has driven the development of more efficient mechanisms for transferring information across the I/O bus is the ever-increasing speed of modern processors. Unfortunately, technology relating to bus substructures has not advanced at the same rate as the technology relating to processors. For example, processors in modern personal computer systems can run at speeds which may be double or triple the speed of the I/O bus. This is mostly due to the inherent difficulty of transferring data through the numerous connectors that allow peripheral devices to communicate with the computer system. Computer system designers have found that communication errors arise when peripheral devices are connected at high bus speeds through many connectors and bridges.
As an example, current Intel(copyright) Pentium(copyright) Pro-based personal computers have a 200 MHz processor bus and a 33 MHz Peripheral Component Interconnect (PCI) I/O bus. Due to the speed differential between the Pentium(copyright) Pro processor bus and the PCI bus, the Pentium(copyright) Pro processor is forced, in many instances, to wait through several clock cycles before accessing the PCI bus to send address or data information to a peripheral device.
To circumvent this problem, others have placed First In/First Out (FIFO) buffers between the Pentium(copyright) processor bus and the PCI bus. For example, the Intel(copyright) 82433LX Local Bus Accelerator Chip includes a four double word deep processor-to-PCI posted write buffer for buffering data writes from the Pentium(copyright) processor to peripheral devices on the PCI bus. This buffer is a simple first-in/first-out (FIFO) buffer wherein the destination address is stored in the buffer with each double word of data. In use, the processor-to-PCI posted write buffer is positioned within a bridge circuit, between the processor bus and the PCI bus. As the processor generates data writes to the PCI bus, the data is queued in the posted write FIFO buffer of the Intel(copyright) 82433LX.
The FIFO buffered bridge structure of the Intel(copyright) 82433LX allows the Pentium(copyright) Pro Processor to complete processor to PCI double word memory writes in three processor clocks (with one wait-state), even if the PCI bus is busy on the first clock. Once the PCI bus becomes available, the posted write data stored in the FIFO buffer is written to the designated PCI device. Uncoupling the processor request from the PCI bus in this manner allows the processor to continue processing instructions while waiting to retrieve the designated information from the PCI bus.
In addition to the four double word deep posted write buffer, the Intel(copyright) 82433LX also includes a processor-to-PCI read pre-fetch buffer. The pre-fetch buffer is four double words deep and enables faster sequential Pentium(copyright) Pro Processor reads from the PCI bus. The Intel(copyright) 82433LX read pre-fetch buffer is organized as a simple FIFO buffer that only supports sequential reads from the PCI bus.
In practice, data is sent from the PCI bus, through the processor-to-PCI read pre-fetch buffer, to the processor. Processors such as the Intel(copyright) Pentium(copyright) Pro include an instruction pre-fetch circuit so they can gather instructions that are about to be executed by the processor.
Unfortunately, attempts at solving the problem of processors running faster than bus substructures have not met with complete success. Many Intel(copyright) Pentium(copyright) Pro-based computer systems that employ FIFO buffering schemes to manage data traffic between the PCI bus and the processor are still inserting one or more wait states into their bus read and write instructions. This lowers the computer system""s performance and causes many software programs to run slower than necessary.
As one example, the Intel(copyright) 82433LX only provides a limited flexibility for handling data writes and reads to the PCI bus. In particular, the processor-to-PCI posted write buffer and processor-to-PCI read pre-fetch buffer are both unidirectional FIFOs and therefore do not allow for random access of their contents. Moreover, if the processor is performing a tremendous number of write instructions to the PCI bus, the posted write buffer does not have the flexibility to handle more than four double words. Thus, wait states are inserted into the processor clock until the FIFO buffers are cleared. For all of the above reasons, it would be advantageous to provide a system that had the flexibility to allow additional buffers to become available during peak write and read periods. This flexibility is offered by the system of the present invention.
One embodiment of the invention is a bridge circuit that includes a dynamic buffer allocation system for efficiently handling data and address transfers between a processor and peripheral devices. Incorporated into the bridge circuit is a bi-directional buffering scheme that provides a tremendous amount of flexibility for processor to peripheral bus reads and writes.
In one embodiment, a dynamic buffer allocation (DBA) system is located within an Intel(copyright) Pentium(copyright) Pro processor to PCI bus bridge circuit. The DBA system may provide a matched set of three address and three data buffers. These buffers act together to manage data flow between the processor and the PCI bus. In addition, the address and data buffers are xe2x80x9cmatchedxe2x80x9d in the sense that each address buffer works in conjunction with only one particular data buffer. These buffers, as described below, allow for a flexible, bi-directional data flow between the processor and peripheral bus of a computer.
In operation, the DBA system buffers write and read requests to and from the processor to the peripheral bus. However, in contrast to previous systems, an embodiment of the DBA system uses matched pairs of address and data buffers. Accordingly, when an address request for a processor data read is sent from the processor to the peripheral bus, it is first buffered by the first available address buffer in the DBA system. As the processor goes on to perform additional instructions, the address request remains in the first address buffer until a free bus cycle is available on the peripheral bus. After the address read request has been sent in a free bus cycle to the target peripheral device, the returning data is sent to the first data buffer since it works in conjunction with the first address buffer. Once the requested read data has been sent from the peripheral bus to the first data buffer, the processor is notified that its requested data is available. Thereafter, the data is sent on the next available processor cycle across the processor bus to the processor.
Data write operations from the processor also function in a similar manner. The processor first sends the destination address to the first available address buffer and the write data to the matched data buffer that works in conjunction with the address buffer. After the data has been sent to the data buffer, the processor is free to work on other instructions. When bus cycles become available on the peripheral bus, the data stored in the data buffer is sent to the address stored in the address buffer.
In another embodiment, the processor is an Intel(copyright) Pentium(copyright) Pro microprocessor and the peripheral bus is a Peripheral Component Interconnect (PCI) bus. In such a computer, there are five possible data paths which manage three types of data transfers. The three types of data transfers in the Pentium(copyright) Pro system are: 1) processor to PCI Write Data, 2) processor to PCI Read Data, and 3) processor to PCI Deferred Data.
As is known, the Intel Pentium(copyright) Pro processor may perform a xe2x80x9cdeferredxe2x80x9d data read from the PCI bus by setting a transfer bit that accompanies the address request. After the data is read from the PCI device, it is sent to a deferred data handling circuit before being sent to the processor bus. The deferred data handler keeps track of the outstanding deferred data reads and notifies the Pentium(copyright) Pro processor when a deferred data read from a PCI device is available. Five possible data paths for handling address and data transfers within the DBA system are listed below.
1. Input into the data buffers from the processor. (processor to PCI Write Data)
2. Input into the data buffers from the PCI bus. (processor to PCI Read Data or processor to PCI Deferred Data)
3. Output from the data buffers to the processor via the Host Slave. (processor to PCI Read Data)
4. Output from the data buffers to the processor via the Host Master. (processor to PCI Deferred Read)
5. Output from the data buffers to the PCI bus. (processor to PCI Write Data)
One embodiment of the invention is a bridge circuit in a computer system for providing data transfers between a processor and a peripheral device. The bridge circuit includes: a first buffer in communication with a processor and a peripheral device; a second buffer in communication with the processor, the peripheral device and the first buffer; control logic for controlling the first buffer and the second buffer as a matched pair so that an address held in the first buffer corresponds to data held in the second buffer; and an arbiter for controlling concurrent bi-directional data flow between the processor and the peripheral device through the second buffer.
Another embodiment is a dynamic buffer system in an Intel Pentium(copyright) Pro computer system for controlling data flow between an Intel Pentium(copyright) Pro processor and a Peripheral Component Interconnect (PCI) device. The dynamic buffer system includes: a first buffer in communication with a Pentium(copyright) Pro processor and a PCI device; a second buffer in communication with the Pentium(copyright) Pro processor, the PCI device and the first buffer; control logic for controlling the first buffer and the second buffer as matched pairs so that an address stored in said first buffer corresponds to data stored in the second buffer; and an arbiter for controlling bi-directional data flow between the Pentium(copyright) Pro processor and the PCI device, wherein the data is buffered by the second buffer.
Yet another embodiment of the invention is a bridge circuit for controlling substantially concurrent data transfers between a processor and a peripheral device in a computer system, including: means for buffering address requests from the processor to the peripheral device; means for bi-directionally buffering data transfers between the processor and the peripheral device; and control logic for controlling the means for buffering and the means for bidirectionally buffering so that each of the buffered data transfers relates to an address held in the means for buffering.